首次啟動均一 Local server 與再啟動 with docker

先備技能

本機需要先安裝好 Docker,也需要先建立配備 google cloud sdk 的 docker image,還沒完成的話請參照前一篇:安裝 Local Server 的環境

操作步驟

  1. 新建並啟動 container
  2. 在 container build package
  3. 在 contener 中 auth 並運作 local server
  4. 連到 localhost:8080 以及 localhost:8000
  5. 結束 local server、離開 container
  6. 再次啟動 container
  7. 同場加映
    1. 指令介紹(如果你是均一工程師,強烈建議你讀懂這些指令)
    2. unit test / api test 的 docker container
1. 首次啟動 local server:新建並啟動 container
$ docker run -it -v ~/${Path To}/junyiacademy:/src -v ~/${Path To}/junyicontentservice:/content_src -v ~/${Path To}/work_resource:/work_resource \
    -p 8080:8080 -p 8000:8000 --name appserver gcr.io/junyiacademy/dev/localserver:latest bash
請有意識的替換掉${Path To},再把指令貼到 Commend Line

~/${Path To}/junyiacademy: 請替換成你的 junyiacademy 資料夾路徑

~/${Path To}/workresource: 請替換成你放 db 的資料夾路徑(你放 db 的地方不一定叫 work_resource,請替換成你放 db 的地方)

看到下面的提示輸入即代表成功進入 docker container 環境了

root@dcdb54e27362:/#
2. 在 container 中 build package
root@dcbd54e27362:/# cd src
root@dcdb54e27362:/# npm install
root@dcdb54e27362:/# cd javascript/perseus-package
root@dcdb54e27362:/# npm install
root@dcdb54e27362:/# cd ..
root@dcdb54e27362:/# cd ..
root@dcdb54e27362:/# make build_js
3. 在 container 中 auth 並運作 local server

以下兩個 auth 都要跑,兩個指令 auth 的方式都是執行後會產生一個網址,將網址複製到瀏覽器候登入均一的 google 帳號認證,最後把瀏覽器顯示的認證碼貼回 terminal 即可

root@dcdb54e27362:/# gcloud auth login
root@dcdb54e27362:/# gcloud auth application-default login

兩個都認證完之後才可以用下面的指令運作 local server

請先進入 /src 資料夾

root@dcdb54e27362:/# /google-cloud-sdk/bin/dev_appserver.py --datastore_path=/work_resource/datastore.db \
--host=:: --admin_host=:: local_dispatch.yaml local_app.yaml /content_src/app.yaml -A junyiacademy --enable_host_checking=false --enable_console
4. 連到 http://localhost:8080http://localhost:8000

確認 local server 可以正常連線

確認左上角「課程」選單中是有內容的。假如你抓的是 2016_PublishOK_db 這個檔案,使用 Google 登入應該會變成 Young 的帳號。

注意: 使用 2016_PublishOK_db 的話,資料是放在 junyiacademy 當中,若 app 改成 junyiacademytest1 是不會有資料的。

5. 結束 local server

關掉 local server:在 commend line 的地方按 control + c

停止 container,執行 exit 即可

root@dcdb54e27362:/# exit
6. 再次啟動 local server

先啟動 container ,接著執行一個 bash,就可以再次操作 container

$ docker start appserver
$ docker exec -it appserver bash

接著啟動 local server

root@dcdb54e27362:/# /google-cloud-sdk/bin/dev_appserver.py --datastore_path=/work_resource/datastore.db \
--host=:: --admin_host=:: local_app.yaml --enable_host_checking=false --enable_console

指令介紹

指令很長,分開來看:

  1. docker run 是我們要跑的 docker 命令,所以如果想知道更完整的說明可以 man docker run
  2. -it -v ~/${Path To}/junyiacademy:/src -v ~/${Path To}/work_resource:/work_resource -p 8080:8080 --name appserver 是給 docker run 的參數,詳細如下,其中第 2 步非常重要,請替換路徑
  1. -it 包含兩個指令:分別是-t-i

    • -t配置虛擬終端(pseudo-tty),以及

    • -i要容器的 stdin 保持打開(在foreground開啟),兩個選項經常一起下。

    • 指令中我們合併兩個指令,就變成-it

  2. -v 指定資料夾的映射(非常重要!!!!!)

    • 語法為 -v HOST-PATH:CONTAINER-PATH,可以給零到多個。

    • 指令中的 ~/${Path To}/junyiacademy 請替換成你的 junyiacademy 專案的路徑

    • 指令中的~/${Path To}/work_resource 替換成你放置 datastore 的資料夾路徑。

  3. -p 指定 port 映射,

    • 語法為 -v HOST-PORT:CONTAINER-PORT,可以給零到多個。

    • 指令中映射的 8080 和 8000 為 dev_appserver.py 預設綁定的 port,把它轉出來,之後才能用http://localhost:8080連到 local server。

  4. --name 是給 container 一個易讀的名稱,在這邊我們取名為 appserver

  5. gcr.io/junyiacademy/dev/localserver:latest 是指定 container 是基於哪一個 image 運作的

  6. 最後的bash是要執行的指令,所以這行指令執行後,就會進入這個 container 的 bash,會看到類似下面的提示輸入

root@dcdb54e27362:/#

同場加映 unit test / api test 用的 docker container

對比第一個步驟,unit test / api test /deploy 不必 bind port,也不需要 datastore,所以指令相對簡潔

$ docker run -it -v ~/src/junyiacademy:/src --name test_deploy

進去後依樣要跑步驟 2 的兩個 auth,deploy 的話還要確認下面的指令看的到 version接著才能跑對應的指令。

appcfg.py list_versions . --noauth_local_webserver
  • unit test: make test
  • api test: make test_api

曾經發生過只 auth 一個,就直接跑 api test 失敗後,重新 auth 也無法跑 test,此時請砍掉 container 重來,方可解套

同場加映另一種配置: local 裝 gcloud 時 docker develop 環境 (非建議配置,選讀項目)

步驟 1-6 都是本機未安裝 gcloud sdk 的配置,接下來要介紹的是 local 安裝 gcloud sdk,且在 local auth,並將 credential 分享給 docker 的方法,請見下一頁

results matching ""

    No results matching ""